package com.mowh.multithreading.thread.specific.storage;

/**
 * @author mowh1gd
 * @create 2023/11/27 16:48
 */
public class Log {//作为代理它是各线程共享的。该模式没有线程互斥操作
    private static final ThreadLocal<TSLog> tsLogCollection = new ThreadLocal<>();//储物间(tsLogCollection)有很多储物柜，储物柜里都是行李(TSLog实例)，是线程与被代理实例的键值对应关系表
    public static void println(String s) {//并发
        getTSLog().println(s);
    }
    public static void close() {//并发
        getTSLog().close();
    }
    private static TSLog getTSLog() {//并发
        TSLog tsLog = tsLogCollection.get();//根据当前线程Thread.currentThread()找储物柜并获取行李(TSLog)
        if (tsLog == null) {//找不到说明之前没有存行李，直接根据当前线程(作为键)的行李(作为值)存到储物柜(是哪个储物柜不用关心)
            tsLog = new TSLog(Thread.currentThread().getName() + "-log.txt");
            tsLogCollection.set(tsLog);
        }
        return tsLog;
    }
}
